client-python
kubernetes-incubator/client-python是针对Kubernetes使用python开发的client,可以很方便地让用户通过python访问Kubernetes集群。这次分析将选择典型场景介绍client-python是如何使用的。
要注意的是,例子中的代码需要在使用kubeconfig机制的环境中才能运行成功。
创建
从yaml文件中创建:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
 | import yaml from os import path from kubernetes import client,config from kubernetes.client.rest import ApiException config.load_kube_config() api_instance = client.CoreV1Api() f = open(path.join(path.dirname(__file__), "ubuntu-svc.yaml")) body = yaml.load(f) try:     api_response = api_instance.create_namespaced_service(namespace=body['metadata']['namespace'],                                                           body=body) except ApiException as ex:     print ex
 | 
从dict创建:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
 | from kubernetes import client,config from kubernetes.client.rest import ApiException config.load_kube_config() api_instance = client.CoreV1Api() secret_metadata = {} secret_metadata['name'] = "abcd" secret_metadata['namespace'] = "default" secret_data = {"key": "MTIzNDU2Cg=="} secret_body = client.V1Secret(api_version="v1",                               kind="Secret",                               metadata=secret_metadata,                               data=secret_data,                               type="kubernetes.io/rbd") try:     api_response = api_instance.create_namespaced_secret("default", secret_body)     print api_response except ApiException as ex:     print ex
 | 
获取资源列表
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
 | from kubernetes import client,config from kubernetes.client.rest import ApiException config.load_kube_config() api_instance = client.CoreV1Api() namespace = "default" label_selector = "app=ubuntu" field_selector = "" try:     api_response = api_instance.list_namespaced_service(namespace=namespace,                                                         label_selector=label_selector,                                                         field_selector=field_selector,                                                         pretty=True,                                                         watch=False).to_dict()     print api_response except ApiException as ex:     print ex
 | 
获取资源
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
 | from kubernetes import client,config from kubernetes.client.rest import ApiException config.load_kube_config() api_instance = client.CoreV1Api() namespace = "default" name = "ubuntu11" try:     api_response = api_instance.read_namespaced_service(name=name,                                                         namespace=namespace,                                                         pretty=True,                                                         exact=True).to_dict()     print api_response except ApiException as ex:     print ex
 | 
更新资源
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
 | from kubernetes import client,config from kubernetes.client.rest import ApiException config.load_kube_config() api_instance = client.CoreV1Api() namespace = "default" name = "ubuntu11" try:     body = api_instance.read_namespaced_service(name=name,                                                 namespace=namespace,                                                 pretty=True,                                                 exact=True).to_dict()     body['metadata']['labels']['type'] = "service"     api_response = api_instance.patch_namespaced_service(name=body['metadata']['name'],                                                          namespace=body['metadata']['namespace'],                                                          body=body) except ApiException as ex:     print ex
 | 
删除资源
| 1 2 3 4 5 6 7 8 9 10 11 12 13
 | from kubernetes import client,config from kubernetes.client.rest import ApiException config.load_kube_config() api_instance = client.CoreV1Api() namespace = "default" name = "ubuntu11" try:     api_response = api_instance.delete_namespaced_service(namespace=namespace,                                                           name=name) except ApiException as ex:     print ex
 | 
附录
service yaml文件
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14
 | apiVersion: v1 kind: Service metadata:     name: ubuntu11     namespace: default     labels:         app: ubuntu spec:     ports:       - port: 22         targetPort: 22         name: ssh     selector:         app: ubuntu
 |